var store_departamento;
var store_presupuesto;
var store_rubro;

Ext.onReady(function()
{
   store_departamento = new X.store.Json({
        fields : [
            'codigoDepartamento',
            'nombreDepartamento',
            'isDepartment',
            'ppk',
            'pname'
        ]
    });

    store_centros = new X.store.Json({
        fields : [
            'codigoDepartamento',
            'nombreDepartamento',
            'isDepartment',
            'ppk',
            'pname'
        ]
    });

    store_rubro = new X.store.Json({
        fields : [
            'codigoRubro',
	    'codigo',
            'nombreRubro',
            'codigoNombre',
            'general'
        ]
    });
   store_presupuesto = new X.store.Json({
        fields : [
            'codigoPresupuesto',
            'periodo'
        ]
    });
	
	store_rubro.addListener('load', function(store, records, options){
       for(var i=0; i<store.getCount(); i++){
           var record = store.getAt(i);
           record.set('codigoNombre', record.get('codigo') + ' ' + record.get('nombreRubro'));
       }
    });
	
	// form invisible para hacer el submit desde el campo filtroTipo
    var formSubmitRubro = new Ext.form.FormPanel({
        renderTo : 'layout_content',
        hidden   : true
    });

    new X.form.FormPanel({

        title            : 'Editar Cuenta',
        submitButtonText : 'Guardar',
        returnButtonText : 'Cancelar',
        submitUrl        : '/cuenta/ajax-editar',
        returnUrl        : '/cuenta/listar',
        width            : 620,
        labelWidth       : 85,

        items:[
           new X.field.Hidden({id: 'codigoCuenta'}),
           new X.field.Combo ({
		    id    	 : 'Presupuesto',
                    hiddenName   : 'codigoPresupuesto',
                    fieldLabel   : 'Presupuesto',
                    valueField   : 'codigoPresupuesto',
                    displayField : 'periodo',
                    width        : 480,
                    store        : store_presupuesto,
                    listeners    :{
                        select: actualizar_rubros
                    }
                }),
            new X.field.Combo ({
		   id		 : 'Rubro',
                    hiddenName   : 'codigoRubro',
                    fieldLabel   : 'Rubro',
                    valueField   : 'codigoRubro',
                    displayField : 'codigoNombre',
                    width        : 480,
                    store        : store_rubro,
		    editable     : true,	
                    listeners    :{
                       //listener, si el rubro elegido es general=true, el departamento indefectiblemente
                       //es direccion administrativa
                       select: function ( combo, record, index ) {
                           if(store_rubro.getAt(index).get('general')){
                               Ext.getCmp('Departamento').setValue(6);
                               Ext.getCmp('Departamento').initialConfig.listeners.select(
                                    Ext.getCmp('Departamento'), 6);
                               store_departamento.filterBy(function(record, id){
                                    return record.get('codigoDepartamento') == 6;
                                 }, this);
                           }
                           else{
                               store_departamento.clearFilter();
                           }
                        }
                    }
                }),
            new X.field.Combo ({
		    id		 : 'Departamento',
                    hiddenName   : 'codigoDepartamento',
                    fieldLabel   : 'Departamento',
                    valueField   : 'codigoDepartamento',
                    displayField : 'nombreDepartamento',
                    width        : 480,
                    store        : store_departamento,
                    lastQuery    : ''
                    ,
                    listeners:{
                        select:
                                function(combo, value) {

                                 var comboCentros = Ext.getCmp('CentroCostos');
                                 comboCentros.clearValue();

                                 store_centros.filterBy(function(record, id){
                                    return record.get('ppk') == combo.getValue();
                                 }, this);
                                }

                   }
                }),
            new X.field.Combo ({
                    id		 : 'CentroCostos',
                    hiddenName   : 'codigoCentroCostos',
                    fieldLabel   : 'Centro de Costos',
                    valueField   : 'codigoDepartamento',
                    displayField : 'nombreDepartamento',
                    width        : 480,
                    store        : store_centros,
                    lastQuery    : ''
             }),

	      new X.field.Number({fieldLabel:'Monto Inicial', id:'montoInicial',   width:480})
        ],
        listeners: { beforeaction: function(form, action){
			if (Ext.isEmpty(Ext.getCmp('montoInicial').getValue())){
				X.msg.Failure('Complete con un monto inicial.'); return false;
			}
			return true;
		 }
		}
    });
    
    function actualizar_rubros(){

        formSubmitRubro.getForm().submit({
            url       : '/cuenta/ajax-rubros-editar',
            waitTitle : 'Aguarde un momento.',
            waitMsg   : 'Cargando los rubros...',
            params    : {
                tipo : Ext.getCmp('Presupuesto').getValue(), 
                codigoC : Ext.getCmp('codigoCuenta').getValue()
            },

            success : function(form, action){
                try{
                	if (action.result){
                        store_rubro.setJson(Ext.encode(action.result));
                    Ext.getCmp('Rubro').clearValue();
                    }
                }
                catch(e){ X.msg.FailureJs(e.message); }
            },
            failure : function(form, action){
                try{
                    if (action.failureType === Ext.form.Action.SERVER_INVALID){
                        X.msg.Failure(action.result.msg);
                    }
                    else X.msg.Failure('respuesta inválida del servidor');
                }
                catch(e){ X.msg.FailureJs(e.message); }
            }
        });
    }


});
